构建物种丰富度栅格
代码参考:
## 可视化物种丰富度:
# 两种思路:
# 第一种参见:
https://rmacroecology.netlify.app/2018/01/23/a-guide-to-transform-species-shapefiles-into-a-presence-absence-matrix-based-on-a-user-defined-grid-system/
# 第二种参见:
https://rspatial.org/raster/cases/3-speciesdistribution.html
案例
library(maps)
map(add=T)
install.packages("letsR")
library(letsR)
data("Phyllomedusa")
op <- par(mar = rep(0, 4))
plot(Phyllomedusa)
library(spocc)
occurrrences <- occ(query = 'Phyllomedusa', from = 'gbif', limit = 5000)
data <- occurrrences$gbif$data$Phyllomedusa
remove_na <- is.na(data$longitude) | is.na(data$latitude)
data <- data[!remove_na, ]
xy <- data[, c("longitude", "latitude")]
sp_name <- data$name
unique(sp_name)
head(data)
PAM_points <- lets.presab.points(xy, sp_name, xmn = -93, xmx = -29,
ymn = -57, ymx = 15, res = 1)
plot(PAM_points)
PAM_points$Presence_and_Absence_Matrix
plot(PAM_points$Richness_Raster)
map(add=T)
path_Ramphastos <- system.file("extdata", package = "letsR")
rgdaltest<-readOGR('D:/bclang/R-4.0.3/library/letsR/extdata/Ramphastos/Ramphastos_ambiguus_22727999.shp')
PAM_birds <- lets.presab.birds(path_Ramphastos, xmn = -93, xmx = -29,
ymn = -57, ymx = 25)
plot(PAM_birds)
sp.r <- rasterToPolygons(raster(xmn = -93, xmx = -29,
ymn = -57, ymx = 15,
resolution = 5))
plot(sp.r)
slot(sp.r, "data") <- cbind("ID" = 1:length(sp.r),
slot(sp.r, "data"))
plot(sp.r, border = rgb(.5, .5, .5))
map(add = T)
data(Phyllomedusa)
projection(Phyllomedusa) <- projection(sp.r)
resu <- lets.presab.grid(Phyllomedusa, sp.r, "ID")
rich_plus1 <- rowSums(resu$PAM) + 1
colfunc <- colorRampPalette(c("#fff5f0", "#fb6a4a", "#67000d"))
colors <- c("white", colfunc(max(rich_plus1)))
plot(resu$grid, border = "gray40",
col = colors[rich_plus1])
map(add = TRUE)
ext <- extent(resu$grid)
xmn <- ext[1]
xmx <- ext[2]
ymn <- ext[3]
ymx <- ext[4]
r <- raster(resolution = 5, xmn = xmn, xmx = xmx,
ymn = ymn, ymx = ymx)
rich <- rasterize(resu$grid, r, field = "ID")
values(rich) <- rowSums(resu$PAM)
plot(rich)
map(add = TRUE)
r <- raster(ncols=100, nrows=100)
cells <- c(3:5, 210)
r <- rasterFromCells(r, cells)
cbind(1:ncell(r), getValues(r))
r <- raster(ncols=36, nrows=18)
plot(r)
n <- 1000
set.seed(123)
x <- runif(n) * 360 - 180
y <- runif(n) * 180 - 90
dim(xy)
xy <- cbind(x, y)
summary(xy)
r0 <- rasterize(xy, r)
plot(r0)
data("Phyllomedusa")
rangesize <- lets.rangesize(Phyllomedusa,
coordinates = "geographic")
rangesize <- rangesize / 1000
resu <- lets.maplizer(PAM, rangesize, rownames(rangesize), ras = TRUE)
library(ggplot2)
mpg <- as.data.frame(resu$Matrix)
f <- ggplot(mpg, aes(`Latitude(y)`, Variable_mean))
f + geom_smooth(model = lm) +
geom_point(col = rgb(0, 0, 0, .6)) +
labs(y = "Range Size") +
theme_bw()
as <- read.csv("D:/xh2/f1_points/xhas.csv") %>% na.omit() %>% data.frame()
as2 = SpatialPoints(cbind(as$longitude, as$latitude),
proj4string = CRS("+init=epsg:4326" ))
r <- raster(xmn = 70, xmx = 150,
ymn = -15, ymx = 45,
resolution = 5)
sp.r <- rasterToPolygons(raster(xmn = 70, xmx = 150,
ymn = -15, ymx = 45,
resolution = 5))
sp <- SpatialPointsDataFrame(as2, as)
rich <- rasterize(sp, r, 'name',function(x, ...) length((x)))
colfunc <- colorRampPalette(c("#fff5f0", "#fb6a4a", "#67000d"))
colors <- c("white", colfunc(max(rich_plus1)))
plot(resu$grid, border = "gray40",
col = colors[rich_plus1])
plot(rich)
plot(sp.r,add =T,border = "gray40")
points(as2,col="gray70")
map(add =T)
r <- raster(xmn = 70, xmx = 150,
ymn = -15, ymx = 45,
resolution = 5)
r[] <- 0
tab <- table(cellFromXY(r, as2))
tab
r[as.numeric(names(tab))] <- tab
plot(sp.r,border = "gray40",add= T)
points(as$longitude,as$latitude,col="grey80")
plot(r,add =T)
map(add = T)